home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-12-04 | 3.9 KB | 156 lines | [TEXT/MPS ] |
- #
- # CompareRevisions - Compare the revision in the named file with another revision
- # of the same file.
- #
- # Usage: CompareRevisions file
- #
- # CompareRevisions compares the revision of the named file with another revision
- # of the same file. If they don't match it brings them both up on the screen and
- # puts them side by side. A menu is appended to the menu bar to go through
- # the changes. When all the changes have been shown, the revision windows are
- # restored and closed.
- #
- # The differences are shown from bottom to top so that if any changes are made
- # in the files, the line offsets are not messed up.
- #
- # To add CompareRevisions to a menu, execute the following command:
- #
- # AddMenu Project 'CompareRevisions' 'CompareRevisions "{Active}" ∑∑ "{WorkSheet}"'
- #
- # This script creates three temporary files which are deleted on exit or abort.
- # {TempFolder}Compare_File, {TempFolder}Compare_State and file,<rev>,
- #
- #
- # NOTE:
- # 1. CompareRevisions calls the script CompareFiles.
- #
- # © Apple Computer, Inc. 1988 - 1993, 1997
- # All rights reserved.
-
- Set Exit 0
- Set error 0
- Begin
-
- # Check parameters.
-
- If {#} ≠ 1
- Echo "### Usage - {0} file"
- Exit 0
- End >> Dev:StdErr
-
- # Make sure the file exists
-
- If "" == "`Exists -f "{1}"`"
- Echo "### {0} - File ∂"{1}∂" not found"
- Exit 4
- End
-
- # Break apart the pathname.
-
- Set f "{1}"
- If "{f}" =~ /(≈)®1:(≈)®2/
- Set dir "{®1}:"
- Set f "{®2}"
- Else
- Set dir `directory`
- If "{dir}" =~ /(≈)®1:/
- Set dir "{®1}:"
- End
- End
-
- Set path "{dir}{f}"
-
- # See if the file belongs to a project.
- # Then find the name of the parent project.
-
- (Set info "`ProjectInfo "{path}"`" || Set error 1)
- (Evaluate "{info}" =~ /[¬,]+,([¬ ∂t+*∂']+)®4([+*]«0,1»)®1[∂']* ≈/
- Evaluate "{info}" =~ /≈Project: (≈∫)®2 +Checked out≈/ ) >dev:null
- If {error} ≠ 0 || "{info}" == ""
- Alert "∂"{path}∂" doesn’t belong to a project."
- Exit 0
- End
- Set rev1 "{®4}"
-
- # At this point:
- # {®1} => '', '+', or '*'
- # {®2} => project path
- # {path} => file pathname
- # {rev1} => revision
- # {dir} => file directory path
- # {f} => file leaf name
- #
- # Is the right project mounted?
-
- (Set revList "`ProjectInfo -s -project "{®2}" "{f}"`") ≥dev:null
- If "{revlist}" == ""
- Alert "Project ∂"{®2}∂" is not mounted."
-
- Exit 0
- End
-
- # Remove checked out ('+') revisions from the revision list.
-
- Loop
- If "`Evaluate " {revlist}" =~ /(≈)®7 (∂')«0,1»{f},[¬+]+∂+(∂')«0,1»(≈)®8/`"
- Set revlist "{®7}{®8}"
- Else
- Break
- End
- End
-
- # Remove the current revision from the revision list.
-
- If ".{®1}" !~ /.[+*]/ && "`Evaluate " {revlist}" =~ /(≈[¬'])®7[∂']«0,1»{f},{rev1}[∂']«0,1»(≈)®8/`"
- Set revlist "{®7}{®8}"
- End > dev:null
-
- If "{revlist}" =~ / */
- Alert "No revisions to compare against."
- Exit 4 # we're done if the rev list is null
- End
-
- # Request the number of the revision to be compared.
-
- (Set rev2 "`GetListItem -q -s -r 8 -m "Compare ∂"{f},{rev1}{®1}∂" with:" -d {revList} ∂
- || Set error {Status}`")
-
- If {error} == 0
-
- (Evaluate "{rev2}" =~ /≈,(≈)®7/ ) >dev:null
- Set rev2 "{®7}"
-
- # Rename the active window so we can checkout a read-only copy of the
- # revision we want to compare against. We'll have to change the name back.
-
- # Find a temporary directory where I can checkout the file
- Set coDir "{TempFolder}CompareRevisions.Dir:"
- Delete -i -y "{coDir}"
- NewFolder "{coDir}"
-
- (Checkout "{f},{rev2}" -d "{coDir}" -project "{®2}" || Set error {Status})
- If {error} ≠ 0
- Alert "∂"{f},{rev2}∂" can’t be checked out [{error}]."
- Rename "{path},{rev1}{®1}" "{path}"
- Delete -i -y "{coDir}"
- Exit 0
- End
-
- Move "{coDir}{f}" "{path},{rev2}"
- Delete -i -y "{coDir}"
-
- # Compare the two files and then clean up.
-
- CompareFiles "{path}" "{path},{rev2}" ∑ dev:null
- Set MyStatus {Status}
- If {MyStatus} == 2
- Echo Delete ∂""{path},{rev2}"∂" >> "{TempFolder}Compare_State"
- Else If {MyStatus} == 3
- Delete "{path},{rev2}"
- Else If {MyStatus} == 0
- Alert "Revisions match."
- Delete "{path},{rev2}"
- End
- End
- End
-